import { ArgumentsHost, Catch, ExceptionFilter, HttpException, HttpStatus } from '@nestjs/common';
import { Request, Response } from 'express';

@Catch() // 1. 声明这个过滤器只处理 HttpException 类型的异常
export class HttpExceptionFilter implements ExceptionFilter { // 2. 实现 Nest 的 ExceptionFilter 接口
  catch(exception: unknown, host: ArgumentsHost) { // 第一个参数 exception 实例化对象，第二个参数 host 上下文信息
    // 获取请求和响应对象（类似 Express 的 req/res）
    const ctx = host.switchToHttp();
    const response = ctx.getResponse<Response>();
    const request = ctx.getRequest<Request>();
    const httpStatus = exception instanceof HttpException ? exception.getStatus() : HttpStatus.INTERNAL_SERVER_ERROR; 
    const message=exception instanceof HttpException?exception.message:'内部错误'

    // 返回自定义的 JSON 错误响应
    response.status(httpStatus).json({
      code:httpStatus,
      message,
      
      // statusCode: httpStatus, // 错误码（如 404）
      // timestamp: new Date().toISOString(), // 时间戳
      // path: request.url, // 用户访问的 URL
    });
  }
}